package ec.edu.ups.cidi.siia.plamdep.frontend.controlador;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import ec.edu.ups.cidi.siia.plamdep.frontend.wsclient.ClienteAlgoritmos;
import ec.edu.ups.cidi.siia.plamdep.frontend.wsclient.algoritmo.*;

@ManagedBean
@SessionScoped
public class AlgortimoBean 
{
	@Inject ClienteAlgoritmos cliente;
	List<AlgoritmoRegistro> algoritmos;
	List<String> algoritmosComparacionDescripcion;
	List<String> algoritmosExtraccionDescripcion;
	AlgoritmoRegistro algoritmo;
	Respuesta respuesta;
	String archivo;
	HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    HttpSession session = request.getSession(false);

	@PostConstruct
	public void init()
	{
		algoritmo=new AlgoritmoRegistro();
		respuesta= new Respuesta ();
		
	    try{
        archivo=(String)session.getAttribute("ruta_jar");
        }catch (Exception e) {
        	archivo="";
        }
	    algoritmo.setRuta(archivo);
	}
	
	
	public List<AlgoritmoRegistro> getAlgoritmos() {
		try {
			return cliente.listar();
			
		} catch (Exception e) {
			e.printStackTrace();
			return new ArrayList<AlgoritmoRegistro>();
		}
	}
	public void setAlgoritmos(List<AlgoritmoRegistro> algoritmos) {
		
		
		this.algoritmos = algoritmos;
	}
	public List<String> getAlgoritmosComparacionDescripcion() {
		
		algoritmosComparacionDescripcion=new ArrayList<String>();
		
		for(AlgoritmoRegistro alg:this.getAlgoritmos())
		{
			if(alg.getTipo()==1)
				algoritmosComparacionDescripcion.add(alg.getNombre());
			
		}
		
		return algoritmosComparacionDescripcion;
	}
	public void setAlgoritmosComparacionDescripcion(List<String> algoritmosDescripcion) {
		this.algoritmosComparacionDescripcion = algoritmosDescripcion;
	}
	public List<String> getAlgoritmosExtraccionDescripcion() {
		
		algoritmosExtraccionDescripcion=new ArrayList<String>();
		
		for(AlgoritmoRegistro alg:this.getAlgoritmos())
		{
			if(alg.getTipo()==2)
				algoritmosExtraccionDescripcion.add(alg.getNombre());
			
		}

		return algoritmosExtraccionDescripcion;
	}
	public void setAlgoritmosExtraccionDescripcion(
			List<String> algoritmosExtraccionDescripcion) {
		this.algoritmosExtraccionDescripcion = algoritmosExtraccionDescripcion;
	}
	public AlgoritmoRegistro getAlgoritmo() {
		return algoritmo;
	}
	public void setAlgoritmo(AlgoritmoRegistro algoritmo) {
		this.algoritmo = algoritmo;
	}
	
	
	public Respuesta getRespuesta() {
		return respuesta;
	}


	public void setRespuesta(Respuesta respuesta) {
		this.respuesta = respuesta;
	}


	public void registrar()
	{
		try {
			respuesta =cliente.registrar(algoritmo);
	        session.setAttribute("ruta_jar","");

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public String getNombreArchivo()
	{
		try
		{
					return archivo.replaceAll(System.getProperty("plamdep.resources.path")+"/algoritmos_repositorio/", "");
			
		}catch(Exception e){}
		return "";
		
	}
	public boolean fileLoaded()
	{
		try
		{
			if(archivo.length()>0)
			return true;
			
		}catch(Exception e){}
		
		return false;
		
	}	
}
